package cool.ale.errorMessage.postConstruct;

import cool.ale.errorMessage.util.ErrorMsgUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 业务错误消息初始化数据到redis缓存
 *
 * @author dujlc
 * @date 2022/12/3 18:36
 * @see
 * @since 1.0
 */
@Slf4j
@Component
public class AleErrorMessageInitCache {

    /**
     * 本任务的标题
     */
    private final static String TASK_NAME = "初始化业务信息任务";

    /**
     * 错误信息工具类
     */
    @Autowired
    private ErrorMsgUtil errorMsgUtil;

    /**
     * 初始化业务错误信息到redis数据库中
     * 经过 @PostConstruct 修饰的方法会在服务器加载Servlet的时候运行，并且只会被服务器执行一次
     */
    @PostConstruct
    public void initErrorMsg(){
        log.info("{}开始：", TASK_NAME);
        doInitErrorMsg();
        log.info("{}结束。", TASK_NAME);
    }


    /**
     * 真正去做初始化业务错误信息到redis数据库中的操作
     */
    private void doInitErrorMsg(){
        // 1、加载当前生效的国际化文本生效语言以及返回相应文件的业务异常map集合
        ConcurrentHashMap<String, String> errorMap = errorMsgUtil.loadEffectLanguageAndGetErrorMap();
        if (null == errorMap){
            return;
        }

        // 2、全部放到redis数据库中
        errorMsgUtil.writeErrorMapToRedis(errorMap);
    }
}
